// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import store from './store'
import props from './props'

// ============================== 导出混合方法 ============================== //

export default (deviceCategoryId = '', myStore = {}) => ({
  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [
    CORE.mixStore(
      CORE.store(
        store, // 内置仓库
        { modules: { map: { state: { INIT_PARAM: { deviceCategoryId } } } } }, // 设备类别
        myStore, // 扩展仓库
      ),
    ),
  ],

  /**
   * 组件导入 (Abc.vue + Abc/index.vue)
   */
  ...CORE.components(require.context('./', true, /vue$/)),

  /**
   * 属性注册 (抽取以便查阅)
   */
  props,

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 主体属性
     */
    bodyProps() {
      return {
        hasRegion: true,
        param: this.map_infoParam,
        bind: 'areaId',
        rootId: this.rootId,
        initRoot: true,
        noPadding: true,
      }
    },
  },

  /**
   * 监听属性 (深度 deep 首次 immediate)
   */
  watch: {
    /**
     * 监听信息就绪
     */
    map_readyInfo(ready) {
      if (ready) {
        const { map_info: { id }, map_param, map_selectParam } = this

        // 点位列表
        Object.assign(map_param, { areaMapId: id })
        this.map_startList()

        // 周界列表
        Object.assign(map_selectParam, { areaMapId: id })
        this.map_startSelect()
      }
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击切换
     */
    toChange() {
      this.map_setOne()
      this.map_setList()
      this.map_startInfo()
    },
  },
})
